<?xml version="1.0" encoding="UTF-8" ?>

<xsd:schema xmlns="http://www.springframework.org/schema/jdbc"
		xmlns:xsd="http://www.w3.org/2001/XMLSchema"
		xmlns:beans="http://www.springframework.org/schema/beans"
		xmlns:tool="http://www.springframework.org/schema/tool"
		targetNamespace="http://www.springframework.org/schema/jdbc"
		elementFormDefault="qualified"
		attributeFormDefault="unqualified">

	<xsd:import namespace="http://www.springframework.org/schema/beans" schemaLocation="https://www.springframework.org/schema/beans/spring-beans.xsd"/>
	<xsd:import namespace="http://www.springframework.org/schema/tool" schemaLocation="https://www.springframework.org/schema/tool/spring-tool.xsd"/>

	<xsd:element name="embedded-database">
		<xsd:annotation>
			<xsd:documentation source="java:org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean"><![CDATA[
	Creates an embedded database instance and makes it available to other beans as a javax.sql.DataSource.
			]]></xsd:documentation>
			<xsd:appinfo>
				<tool:annotation>
					<tool:exports type="javax.sql.DataSource"/>
				</tool:annotation>
			</xsd:appinfo>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="beans:identifiedType">
					<xsd:sequence>
						<xsd:element name="script" type="scriptType" minOccurs="0" maxOccurs="unbounded">
							<xsd:annotation>
								<xsd:documentation><![CDATA[
			An SQL script to execute to populate, initialize, or clean up an embedded database.
								]]></xsd:documentation>
							</xsd:annotation>
						</xsd:element>
					</xsd:sequence>
					<xsd:attribute name="database-name" type="xsd:string" default="">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
			The name to assign to the embedded database. Note that this is not the
			bean name but rather the name of the embedded database as used in the JDBC
			connection URL for the database. Defaults to "testdb" if an explicit bean
			'id' has not been provided.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="generate-name" type="xsd:string" use="optional" default="false">
						<xsd:annotation>
							<xsd:documentation>
			If set to "true", a pseudo-random unique name will be generated for the embedded
			database, overriding any implicit name provided via the 'id' attribute or any
			explicit name provided via the 'database-name' attribute.
			Note that this is not the bean name but rather the name of the embedded database
			as used in the JDBC connection URL for the database.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="separator" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	The default statement separator to use (the default is to use ';' if it is present
	in the script, or '\n' otherwise).
				]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="type" type="databaseType" default="HSQL">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
			The type of embedded database to create, such as HSQL, H2 or Derby. Defaults to HSQL.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="initialize-database">
		<xsd:annotation>
			<xsd:documentation source="java:org.springframework.jdbc.datasource.init.DataSourceInitializer"><![CDATA[
	Initializes a database instance with SQL scripts provided in nested <script/> elements.
			]]></xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="script" type="scriptType" minOccurs="1" maxOccurs="unbounded">
					<xsd:annotation>
						<xsd:documentation><![CDATA[
			An SQL script to execute to populate, initialize, or clean up a database.
						]]></xsd:documentation>
					</xsd:annotation>
				</xsd:element>
			</xsd:sequence>
			<xsd:attribute name="data-source" type="xsd:string" default="dataSource">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
			A reference to a data source that should be initialized. Defaults to "dataSource".
					]]></xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref"/>
						<tool:expected-type type="javax.sql.DataSource"/>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="enabled" type="xsd:string" use="optional" default="true">
				<xsd:annotation>
					<xsd:documentation>
			Is this bean "enabled", meaning the scripts will be executed?
			Defaults to true but can be used to switch on and off script execution
			depending on the environment.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="ignore-failures" use="optional" default="NONE">
				<xsd:annotation>
					<xsd:documentation>
						Should failed SQL statements be ignored during execution?
					</xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value="NONE">
							<xsd:annotation>
								<xsd:documentation><![CDATA[
						Do not ignore failures (the default)
								]]></xsd:documentation>
							</xsd:annotation>
						</xsd:enumeration>
						<xsd:enumeration value="DROPS">
							<xsd:annotation>
								<xsd:documentation><![CDATA[
						Ignore failed DROP statements
								]]></xsd:documentation>
							</xsd:annotation>
						</xsd:enumeration>
						<xsd:enumeration value="ALL">
							<xsd:annotation>
								<xsd:documentation><![CDATA[
						Ignore all failures
								]]></xsd:documentation>
							</xsd:annotation>
						</xsd:enumeration>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
			<xsd:attribute name="separator" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	The default statement separator to use (the default is to use ';' if it is present
	in the script, or '\n' otherwise).
				]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="scriptType">
		<xsd:attribute name="location" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The resource location of an SQL script to execute. Can be a single script location
	or a pattern (e.g. classpath:/com/foo/sql/*-data.sql).
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="encoding" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The encoding for SQL scripts, if different from the platform encoding.
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="separator" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	The statement separator in the script (the default is to use ';' if it is present
	in the script, or '\n' otherwise).
				]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="execution">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	Indicate the execution phase of this script. Use INIT to execute on startup (as a
	bean initialization) or DESTROY to execute on shutdown (as a bean destruction callback).
				]]></xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="INIT"/>
					<xsd:enumeration value="DESTROY"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:simpleType name="databaseType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="HSQL">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
			HyperSQL DataBase Engine
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="H2">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
			H2 Database Engine
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="DERBY">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
			Apache Derby Database Engine
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:enumeration>
		</xsd:restriction>
	</xsd:simpleType>

</xsd:schema>
